package com.example.pro3_reactor;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Stream;

/**
 * @program: reactivePro
 * @description: 简单创建Mono, Flux
 * @author: zy
 * @create: 2025-04-25 21:28
 */
public class App1_simple {
    public static void main(String[] args) {
        // 创建一个Mono对象，包含一个整数元素
        Mono<Integer> mono = Mono.just(1);
// 使用flux()方法把Mono转换成Flux
        Flux<Integer> flux = mono.flux();

// 从一个Callable对象创建一个Mono
        Callable<String> callable = () -> "World";

        Consumer c;  //   System.out.println( xxx  );
        Mono.fromCallable(callable).subscribe(System.out::println); // 输出World

// 从一个Supplier对象创建一个Mono
        Supplier<String> supplier = () -> "Supplier!";
        Mono.fromSupplier(supplier).subscribe(System.out::println); // 输出Supplier!

// 创建一个Flux对象，包含三个整数元素
        Flux<Integer> flux2 = Flux.just(1, 2, 3);
// 使用next()方法把Flux转换成Mono
        Mono<Integer> mono2 = flux2.next();
        mono2.subscribe(System.out::println); // 输出1

        System.out.println("==================");


// 对Flux发出的每个元素进行过滤操作
        Flux.range(1, 5).filter(i -> i % 2 == 0).subscribe(System.out::println); // 输出2和4
        System.out.println( "==============================");

// 使用迭代器构建
        Flux.fromIterable(new ArrayList() {
            {
                add(1);
                add(2);
                add(3);
            }
        }).subscribe(System.out::println);  // 输出1、2、3
        System.out.println("=====================");
// 使用数组构建
        Flux.fromArray(new Integer[]{1, 2, 3, 4}).subscribe(System.out::println);
        System.out.println("=====================");
// 使用流构建
        Flux.fromStream(Stream.of(5, 6, 7, 8, 9)).subscribe(System.out::println);
    }
}
